using System;
using System.Collections.Generic;
using TeamCommunitySolution.Domain.DataLayer.Base;

namespace TeamCommunitySolution.Services.Repositories
{
    /// <summary>
    /// Definition for interfacing with the system user repository.
    /// </summary>
    public interface ISystemUserRepository
    {
        /// <summary>
        /// Saves the user.
        /// </summary>
        /// <param name="user">The user instance.</param>
        void SaveUser(SystemUser user);

        /// <summary>
        /// Gets the user.
        /// </summary>
        /// <param name="user">The user instance.</param>
        /// <returns>System User instance.</returns>
        SystemUser GetUser(SystemUser user);

        /// <summary>
        /// Gets the user by field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="fieldValue">The field value.</param>
        /// <returns>System User Instance.</returns>
        SystemUser GetUserByField(string field, string fieldValue);

        /// <summary>
        /// Gets the user.
        /// </summary>
        /// <param name="email">The email.</param>
        /// <param name="password">The password.</param>
        /// <returns>An instance of the system user.</returns>
        SystemUser GetUserByEmailAndPassword(string email, string password);

        /// <summary>
        /// Saves the multiple users.
        /// </summary>
        /// <param name="systemUserList">The system user list.</param>
        void SaveMultipleUsers(List<SystemUser> systemUserList);

        /// <summary>
        /// Deletes the user.
        /// </summary>
        /// <param name="user">The user.</param>
        void DeleteUser(SystemUser user);

        IList<SystemUser> ListAllUsers();
    }
}